import { defineStore } from "pinia";
import { ref } from "vue";
import { loginAPI, type LoginData } from '@/apis/user'
// 在userStore中使用CartStore
import { useCartStore } from "@/stores/cart";
import { mergeCartAPI } from "@/apis/cart";

// 官方推荐使用hooks的那种命名规范
/**
 * 参数一：id （建议与文件名一致）
 * 参数二：options 配置对象
 */
// 组合式写法
export const useUserStore = defineStore('user', () => {
    const cartStore = useCartStore()
    // 1.定义管理用户数据的state
    const userInfo = ref({})
    // 2.定义获取接口数据的action函数
    const getUserInfo = async ({ account, password }: LoginData) => {
        const res = await loginAPI({ account, password })
        // console.log(res)
        userInfo.value = res.result
        // 合并购物车操作
        const data = cartStore.cartList.map(item => {
            return {
                skuId: item.skuId,
                selected: item.selected,
                count: item.count
            }
        })
        await mergeCartAPI(data)
        // 获取最新购物车列表
        cartStore.updateNewCartList()
    }
    // 清除用户信息：会同步清空local Storage（由pinia-plugin-persistedstate插件实现）
    const clearUserInfo = () => {
        userInfo.value = {}
        // 清空用户购物车
        cartStore.clearCart()
    }
    // 3.以对象的形式把state和action返回
    return { userInfo, getUserInfo, clearUserInfo }
},
    {
        persist: true   // store持久化配置
    }
)


